package cn.iluwen.airline.Mapper;

import cn.iluwen.airline.Entities.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 查询所有用户 (供 PageHelper 分页使用)
     * @return 用户列表
     */
    @Select("SELECT * FROM users")
    List<User> findAllUsers();
    
    /**
     * 分页查询用户（按创建时间降序）
     * @return 用户列表
     */
    @Select("SELECT * FROM users ORDER BY created_at DESC")
    List<User> findUsersWithPaging();
    
    /**
     * 根据创建日期范围查询用户
     * @param startDate 开始日期（yyyy-MM-dd HH:mm:ss格式）
     * @param endDate 结束日期（yyyy-MM-dd HH:mm:ss格式）
     * @return 用户列表
     */
    @Select("SELECT * FROM users WHERE created_at BETWEEN #{startDate} AND #{endDate} ORDER BY created_at DESC")
    List<User> findUsersByDateRange(@Param("startDate") String startDate, @Param("endDate") String endDate);
    
    /**
     * 根据用户名模糊查询用户
     * @param username 用户名关键词
     * @return 用户列表
     */
    @Select("SELECT * FROM users WHERE username LIKE CONCAT('%', #{username}, '%') ORDER BY created_at DESC")
    List<User> findUsersByUsernameLike(@Param("username") String username);
    
    /**
     * 根据邮箱模糊查询用户
     * @param email 邮箱关键词
     * @return 用户列表
     */
    @Select("SELECT * FROM users WHERE email LIKE CONCAT('%', #{email}, '%') ORDER BY created_at DESC")
    List<User> findUsersByEmailLike(@Param("email") String email);

    /**
     * 根据用户ID查询用户
     * @param userId 用户ID
     * @return 用户对象
     */
    @Select("SELECT * FROM users WHERE user_id = #{userId}")
    User findById(String userId);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户对象
     */
    @Select("SELECT * FROM users WHERE username = #{username}")
    User findByUsername(String username);

    /**
     * 根据邮箱查询用户
     * @param email 邮箱
     * @return 用户对象
     */
    @Select("SELECT * FROM users WHERE email = #{email}")
    User findByEmail(String email);

    /**
     * 创建用户
     * @param user 用户对象
     * @return 影响行数
     */
    @Insert("INSERT INTO users (user_id, username, password, email, phone, real_name, id_card, created_at, updated_at) " +
            "VALUES (#{userId}, #{username}, #{password}, #{email}, #{phone}, #{realName}, #{idCard}, #{createdAt}, #{updatedAt})")
    int createUser(User user);

    /**
     * 更新用户信息
     * @param user 用户对象
     * @return 影响行数
     */
    @Update("UPDATE users SET username = #{username}, password = #{password}, email = #{email}, " +
            "phone = #{phone}, real_name = #{realName}, id_card = #{idCard}, updated_at = #{updatedAt} " +
            "WHERE user_id = #{userId}")
    int updateUser(User user);

    /**
     * 更新用户密码
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return 影响行数
     */
    @Update("UPDATE users SET password = #{newPassword}, updated_at = NOW() WHERE user_id = #{userId}")
    int updatePassword(String userId, String newPassword);

    /**
     * 删除用户
     * @param userId 用户ID
     * @return 影响行数
     */
    @Delete("DELETE FROM users WHERE user_id = #{userId}")
    int deleteUser(String userId);
}
